using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using FEL.ACT;
using FEL.VAL;
using System.Text;
using System.Web.Services;
using System.Reflection;
using HER;

public partial class ACT_ACT_ACTIVO : PaginaBaseFormView
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string ActActivoId = Request.QueryString.Get("Act_Activo_Id");
            if (ActActivoId != null)
            {
                fvact_activo.DefaultMode = FormViewMode.ReadOnly;
                AsignarParametrosDataSourceDeatailsView(ActActivoId);
            }

        }

        base.Page_Load(sender, e);

        Fv.DataBound += new EventHandler(fvact_activo_DataBound);
        fvact_activo.DataBinding += new EventHandler(fvact_activo_DataBinding);

        GuardarEstadoClase();
        //esto
        GuardarEstadoDdlValoracion();
        cargarBotones();

        odsfvact_activo.Updating += new ObjectDataSourceMethodEventHandler(odsfvact_activo_Updating);
        odsfvact_activo.Inserting += new ObjectDataSourceMethodEventHandler(odsfvact_activo_Inserting);



    }

    void fvact_activo_DataBinding(object sender, EventArgs e)
    {
        if (_guardarEstado)
            valoresConservar = CopiarValoresDeControles(Fv, TipoObjeto);
    }

    private int BuscarControl(object key)
    {
        if (valoresConservar.Count == 0) return -1;

        for (int i = 0; i < valoresConservar.Count; i++)
        {
            if (valoresConservar[i].Key.ToString() == key.ToString())
                return i;
        }
        return -1;
    }

    List<DictionaryEntry> valoresConservar = new List<DictionaryEntry>();
    string strId = string.Empty;
    string grupoPredeterminad;
    string grupoDetPredeterminado;
    string valorinversion;
    int h=0;


    void fvact_activo_DataBound(object sender, EventArgs e)
    {
        if (valoresConservar.Count > 0)
            PegarValoresEnControlesOrigen(Fv, valoresConservar);

        DeshabilitraBotonesEnInsert();

        if (Fv.CurrentMode == FormViewMode.Edit || Fv.CurrentMode == FormViewMode.Insert)
        {
            LlenarComboClase(_valorClaseSeleccionado);
            string combogrupo = LlenarComboGrupo(_valorGrupoSeleccionado);
            string idgrupo = ((DropDownList)Fv.FindControl("Act_Grupo_Id")).SelectedValue;
            LlenarComboGrupoDet(idgrupo);            
            LlenarComboValoracion(_valorClaseSeleccionado); 
        }
    }



    private List<DictionaryEntry> CopiarValoresDeControles(Control contenedor, Type tipoObjeto)
    {
        PropertyInfo[] propiedades = tipoObjeto.GetProperties();
        List<DictionaryEntry> parametros = new List<DictionaryEntry>(propiedades.Length);
        foreach (PropertyInfo propiedad in propiedades)
        {
            string valor = Navegacion.ObtenerValorControl(contenedor.FindControl(propiedad.Name));
            parametros.Add(new DictionaryEntry(propiedad.Name, valor));
        }
        return parametros;
    }

    private void PegarValoresEnControlesOrigen(Control contenedor, List<DictionaryEntry> parametros)
    {
        for (int i = 0; i < parametros.Count; i++)
        {
            if (parametros[i].Value != null)
            {
                Navegacion.AsignarValorDeControl(
                    contenedor.FindControl(parametros[i].Key.ToString()),
                    parametros[i].Value.ToString());
            }
        }
    }

    protected void fvact_activo_ModeChanging(object sender, FormViewModeEventArgs e)
    {
        if (Fv.CurrentMode == FormViewMode.ReadOnly
            && e.NewMode == FormViewMode.Edit)
        {
            _valorClaseSeleccionado = ((TextBox)Fv.FindControl("Act_Clase_Id")).Text;
            _valorGrupoSeleccionado = ((TextBox)Fv.FindControl("Act_Grupo_Id")).Text;            
            _valorValoracionSeleccionado = ((TextBox)Fv.FindControl("Val_Inversion_Id")).Text;
            h = 1;
        }
    }

    void odsfvact_activo_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        List<DictionaryEntry> parametros = (List<DictionaryEntry>)e.InputParameters["parametros"];
        string strAct_Clase_Id = ((DropDownList)Fv.FindControl("Act_Clase_Id2")).SelectedValue;
        string strAct_Grupo_Det_Id = ((DropDownList)Fv.FindControl("Act_Grupo_Det_Id2")).SelectedValue;
        string strVal_Inversion_Id = ((DropDownList)Fv.FindControl("Val_Inversion_Id2")).SelectedValue;

        parametros[BuscarParametro(parametros, "Act_Clase_Id")] =
            new DictionaryEntry("Act_Clase_Id", strAct_Clase_Id);

        parametros[BuscarParametro(parametros, "Act_Grupo_Det_Id")] =
            new DictionaryEntry("Act_Grupo_Det_Id", strAct_Grupo_Det_Id);

        parametros[BuscarParametro(parametros, "Val_Inversion_Id")] =
            new DictionaryEntry("Val_Inversion_Id", strVal_Inversion_Id);
    }

    void odsfvact_activo_Updating(object sender, ObjectDataSourceMethodEventArgs e)
    {

        List<DictionaryEntry> parametros = (List<DictionaryEntry>)e.InputParameters["parametros"];
        string strAct_Clase_Id = ((DropDownList)Fv.FindControl("Act_Clase_Id2")).SelectedValue;
        string strAct_Grupo_Det_Id = ((DropDownList)Fv.FindControl("Act_Grupo_Det_Id2")).SelectedValue;
        string strVal_Inversion_Id = ((DropDownList)Fv.FindControl("Val_Inversion_Id2")).SelectedValue;

        parametros[BuscarParametro(parametros, "Act_Clase_Id")] =
            new DictionaryEntry("Act_Clase_Id", strAct_Clase_Id);

        parametros[BuscarParametro(parametros, "Act_Grupo_Det_Id")] =
            new DictionaryEntry("Act_Grupo_Det_Id", strAct_Grupo_Det_Id);

        parametros[BuscarParametro(parametros, "Val_Inversion_Id")] =
            new DictionaryEntry("Val_Inversion_Id", strVal_Inversion_Id);

    }

    private int BuscarParametro(List<DictionaryEntry> parametros, string key)
    {
        for (int i = 0; i < parametros.Count; i++)
        {
            if (parametros[i].Key.ToString() == key)
                return i;
        }
        return -1;
    }

    string _valorGrupoSeleccionado = null;
    string _valorClaseSeleccionado = null;    
    string _valorValoracionSeleccionado = null;


    void GuardarEstadoClase()
    {
        if (Fv.CurrentMode == FormViewMode.Edit || Fv.CurrentMode == FormViewMode.Insert)
        {
            _valorClaseSeleccionado = ((DropDownList)Fv.FindControl("Act_Clase_Id2")).SelectedValue;
        }
    }

    void GuardarEstadoDdlGrupo()
    {
        if (Fv.CurrentMode == FormViewMode.Edit || Fv.CurrentMode == FormViewMode.Insert)
        {
            _valorGrupoSeleccionado = ((DropDownList)Fv.FindControl("Act_Grupo_Id")).SelectedValue;
        }
    }
    
    void GuardarEstadoDdlValoracion()
    {
        if (Fv.CurrentMode == FormViewMode.Edit || Fv.CurrentMode == FormViewMode.Insert)
        {
            _valorValoracionSeleccionado = ((DropDownList)Fv.FindControl("Val_Inversion_Id2")).SelectedValue;
        }
    }

    protected override Type TipoObjeto
    {
        get { return typeof(global::Act_Activo); }
    }

    protected override FormView Fv
    {
        get { return fvact_activo; }
    }

    protected override ObjectDataSource OdsDv
    {
        get { return odsfvact_activo; }
    }

    protected override string Contenedor
    {
        get { return "ACT_ACTIVO"; }
    }

    private void cargarBotones()
    {
        BtnImagen.Text = GetLocalResourceObject("Btn_Act_Activo_ImagenRecursoKCG.Text").ToString();
        BtnImagen.ToolTip = GetLocalResourceObject("Btn_Act_Activo_ImagenRecursoKCG.ToolTip").ToString();
        BtnAtributos.Text = GetLocalResourceObject("Btn_Act_Activo_AtributosRecursoKCG.Text").ToString();
        BtnAtributos.ToolTip = GetLocalResourceObject("Btn_Act_Activo_AtributosRecursoKCG.ToolTip").ToString();
        BtnActivoManual.Text = GetLocalResourceObject("Btn_Act_Activo_ManualRecursoKCG.Text").ToString();
        BtnActivoManual.ToolTip = GetLocalResourceObject("Btn_Act_Activo_ManualRecursoKCG.ToolTip").ToString();
        BtnArchivos.Text = GetLocalResourceObject("Btn_Act_Activo_ArchivosRecursoKCG.Text").ToString();
        BtnArchivos.ToolTip = GetLocalResourceObject("Btn_Act_Activo_ArchivosRecursoKCG.ToolTip").ToString();        
    }
    private void DeshabilitraBotonesEnInsert()
    {
        if (Fv.CurrentMode == FormViewMode.Insert)
        {
            BtnImagen.Enabled = false;
            BtnAtributos.Enabled = false;
            BtnActivoManual.Enabled = false;
            BtnArchivos.Enabled = false;
        }
        if (Fv.CurrentMode == FormViewMode.Edit || Fv.CurrentMode == FormViewMode.ReadOnly)
        {
            BtnImagen.Enabled = true;
            BtnAtributos.Enabled = true;
            BtnActivoManual.Enabled = true;
            BtnArchivos.Enabled = true;
        }
    }   
   
    protected void BtnImagen_Click(object sender, EventArgs e)
    {
        TextBox ActivoId = (TextBox)Fv.FindControl("Id");
        TextBox ActivoCodigo = (TextBox)Fv.FindControl("Codigo");
        TextBox ActivoNombre = (TextBox)Fv.FindControl("Nombre");
        Response.Redirect("~/ACT/ACT_ACTIVO_IMAGEN.aspx?Act_Activo_Id=" + ActivoId.Text + "&Act_Activo_Codigo=" + ActivoCodigo.Text + "&Act_Activo_Nombre=" + ActivoNombre.Text);
    }
    protected void BtnAtributos_Click(object sender, EventArgs e)
    {
        TextBox ActivoId = (TextBox)Fv.FindControl("Id");
        TextBox ActivoCodigo = (TextBox)Fv.FindControl("Codigo");
        TextBox ActivoNombre = (TextBox)Fv.FindControl("Nombre");
        Response.Redirect("~/ACT/ACT_ACTIVO_ATRIBUTO.aspx?Act_Activo_Id=" + ActivoId.Text + "&Act_Activo_Codigo=" + ActivoCodigo.Text + "&Act_Activo_Nombre=" + ActivoNombre.Text);
    }
    protected void BtnActivoManual_Click(object sender, EventArgs e)
    {
        TextBox ActivoId = (TextBox)Fv.FindControl("Id");
        TextBox ActivoCodigo = (TextBox)Fv.FindControl("Codigo");
        TextBox ActivoNombre = (TextBox)Fv.FindControl("Nombre");
        Response.Redirect("~/ACT/ACT_ACTIVO_MANUAL.aspx?Act_Activo_Id=" + ActivoId.Text + "&Act_Activo_Codigo=" + ActivoCodigo.Text + "&Act_Activo_Nombre=" + ActivoNombre.Text);
    }
    protected void BtnArchivos_Click(object sender, EventArgs e)
    {
        TextBox ActivoId = (TextBox)Fv.FindControl("Id");
        TextBox ActivoCodigo = (TextBox)Fv.FindControl("Codigo");
        TextBox ActivoNombre = (TextBox)Fv.FindControl("Nombre");
        Response.Redirect("~/ACT/ACT_ACTIVO_ARCHIVO.aspx?Act_Activo_Id=" + ActivoId.Text + "&Act_Activo_Codigo=" + ActivoCodigo.Text + "&Act_Activo_Nombre=" + ActivoNombre.Text);
    }

    [WebMethod]
    static public string[] GetValInversion(string prefixText, int count)
    {
        if (count == 0) count = 10;

        Scope s = (Scope)HttpContext.Current.Session["Scope"];

        FEL.VAL.BO_Val_Inversion boValInversion = new BO_Val_Inversion();

        List<Val_Inversion> litValInversion = boValInversion.GetByLikeNombre("Nombre", s, prefixText + "%");

        List<string> opciones3 = new List<string>();
        for (int i = 0; i < litValInversion.Count && i < count; i++)
        {
            string value = litValInversion[i].Id + "||" +
                           litValInversion[i].Codigo;

            opciones3.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(litValInversion[i].Nombre, value));
        }

        return opciones3.ToArray();
    }

    bool _guardarEstado = false;
    

    protected void Act_Clase_Id2_SelectedIndexChanged(object sender, EventArgs e)
    {
        _guardarEstado = true;        

    }

    protected void Act_Grupo_Id_SelectedIndexChanged(object sender, EventArgs e)
    {
        _guardarEstado = true;
        GuardarEstadoDdlGrupo();

    }

    private string LlenarComboClase(string _valorClaseSeleccionado)
    {
        Scope s = (Scope)Session["Scope"];
        BO_Act_Clase boClase = new BO_Act_Clase();
        List<Act_Clase> intClase = null;
        DropDownList ddlclase = ((DropDownList)Fv.FindControl("Act_Clase_Id2"));

        try
        {
            intClase = boClase.GetByEmpresa("Nombre", s);
        }
        catch
        {
            return null;
        }

        ddlclase.DataSource = intClase;
        ddlclase.DataValueField = "Id";
        ddlclase.DataTextField = "Nombre";
        ddlclase.DataBind();

        if (!string.IsNullOrEmpty(_valorClaseSeleccionado))
        {
            ddlclase.SelectedValue = _valorClaseSeleccionado;
        }

        int indice = ddlclase.SelectedIndex;

        if (intClase.Count > 0)
        {

            grupoPredeterminad = intClase[indice].Act_Grupo_Id;
            grupoDetPredeterminado = intClase[indice].Predeterminado_Act_Grupo_det;
            valorinversion = intClase[indice].Val_Inversion_Id;
        }

        return ddlclase.SelectedValue;

    }

    private string LlenarComboGrupo(string _valorGrupoSeleccionado)
    {
        Scope s = (Scope)Session["Scope"];
        BO_Act_Grupo boGrupo = new BO_Act_Grupo();
        List<Act_Grupo> intGrupo = null;
        DropDownList ddlgrupo = ((DropDownList)Fv.FindControl("Act_Grupo_Id"));

        try
        {
            intGrupo = boGrupo.GetByEmpresa("Nombre", s);
        }
        catch
        {
            return null;
        }

        Act_Grupo grupo = new Act_Grupo();
        grupo.Id = "";
        grupo.Nombre = "";


        intGrupo.Add(grupo);


        ddlgrupo.DataSource = intGrupo;
        ddlgrupo.DataValueField = "Id";
        ddlgrupo.DataTextField = "Nombre";
        ddlgrupo.DataBind();

        if (!string.IsNullOrEmpty(_valorGrupoSeleccionado))
            ddlgrupo.SelectedValue = _valorGrupoSeleccionado;


        else
            if (!string.IsNullOrEmpty(grupoPredeterminad))
                ddlgrupo.SelectedValue = grupoPredeterminad;
            else
                ddlgrupo.SelectedValue = grupo.Id;

        return ddlgrupo.SelectedValue;

    }

    private string LlenarComboGrupoDet(string idgrupo)
    {
        Scope s = (Scope)Session["Scope"];
        BO_Act_Grupo_Det boGrupoDet = new BO_Act_Grupo_Det();
        List<Act_Grupo_Det> intGrupoDet = null;
        DropDownList ddlgrupodet = ((DropDownList)Fv.FindControl("Act_Grupo_Det_Id2"));

        try
        {
            intGrupoDet = boGrupoDet.GetByGrupo("Nombre", s, idgrupo);
        }
        catch
        {
            return null;
        }

        Act_Grupo_Det grupod = new Act_Grupo_Det();
        grupod.Id = "";
        grupod.Nombre = "";


        intGrupoDet.Add(grupod);

        ddlgrupodet.DataSource = intGrupoDet;
        ddlgrupodet.DataValueField = "Id";
        ddlgrupodet.DataTextField = "Nombre";
        ddlgrupodet.DataBind();
        string var = idgrupo;

        if (idgrupo != null)
        {
            ddlgrupodet.SelectedValue = grupoDetPredeterminado;
        }
        else
            ddlgrupodet.SelectedValue = grupod.Id;

        return ddlgrupodet.SelectedValue;
    }

    private string LlenarComboValoracion(string _valorClaseSeleccionado)
    {
        Scope s = (Scope)Session["Scope"];
        BO_Val_Inversion boValInversion = new BO_Val_Inversion();
        List<Val_Inversion> intValor = null;
        DropDownList ddlvalor = ((DropDownList)Fv.FindControl("Val_Inversion_Id2"));

        try
        {
            intValor = boValInversion.GetByEmpresa("Nombre", s);
        }
        catch
        {
            return null;
        }

        Val_Inversion grupod = new Val_Inversion();
        grupod.Id = "";
        grupod.Nombre = "";


        intValor.Add(grupod);

        ddlvalor.DataSource = intValor;
        ddlvalor.DataValueField = "Id";
        ddlvalor.DataTextField = "Nombre";
        ddlvalor.DataBind();

       
        if (!string.IsNullOrEmpty(_valorClaseSeleccionado))
        {
            if (valorinversion != null)
            {
                ddlvalor.SelectedValue = valorinversion;                
            }
            else
                if ((Fv.CurrentMode == FormViewMode.Edit) && (h==1))
                {
                    ddlvalor.SelectedValue = _valorValoracionSeleccionado;
                    h = 0;
                }
                else
                    if (h==0)
                        ddlvalor.SelectedValue = "";                       
        }
        else
            
            ddlvalor.SelectedValue = valorinversion;

        return ddlvalor.SelectedValue;
    }


    protected void BtnListado_Click(object sender, EventArgs e)
    {
        TextBox ActivoId = (TextBox)Fv.FindControl("Id");
        Response.Redirect("~/ACT/ACT_ACTIVO_LISTADO.aspx?Act_Activo_Id=" + ActivoId.Text);
    }
}

